<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>函数</title>
</head>
<body>
<script>
  function f1(){
    console.log('xiaoyi');
  }
  f1(); //调用

  // 声明 有参数,无返回值 普通函数
  // 在函数声明时 使用到的参数 叫 形式参数  形参
  // 在函数调用时 传递的参数 叫 实际参数 实参
  // 一般情况下形参和实参数目和顺序是一一对应的
  function f2(a){
    console.log(a);
  }
  f2(10086); //调用

  function f3(a,b){
    // 函数的形参相当于在函数内部声明的变量
    console.log(a); // 1
    console.log(b); // undefined
    console.log(a+b);
    // 在JS的加法运算时,如果是number + undefined = NaN
    // NaN not a number  非数字的特殊值(属于number类型)
  }
  f3(1,2); //调用
  f3(1); //形参个数比实参少,会有实参被丢弃
  f3(1,2,3); //形参个数比实参多,会有形参接收不到值

  // 计算工资函数: 有可能会接受2个实参,有可能会接受3个实参,也有可能是4,5,6...
  function f4(){
    // 每个函数都会有一个arguments类数组对象,存放函数的实参(现在已经不建议用)
    console.log(arguments);
  }
  f4(1);
  f4(1,2);
  f4(1,2,3);

  // 有返回值的函数   return把函数计算的结果返回到外部
  // return 后方代码不执行
  function f5() {
    return 1+2;
    console.log('hello');
  }
  // 使用变量接收一个函数的返回结果
  let res = f5();
  console.log(res);

  // 第二种声明函数的方法
  let f6 = function (){return 666;}
  console.log(f6()); // 直接打印一个函数的调用结果

  // 第三种 仅作为了解
  let f7 = new Function("name","age","return name+':'+age")
  console.log(f7('shenge',18));
</script>
</body>
</html>